import theAxios from 'axios'
import router from '@/router/index.js'
import { getToken, removeToken } from '@/utils/token.js' // , setToken
// import { Notify } from 'vant'
// import { refreshTokenAPI } from '@/api/index.js'
const axios = theAxios.create({
  baseURL: 'http://toutiao.itheima.net',
  timeout: 20000 /* 20秒超过时间（请求20秒无响应直接判断为超时） */
})
/* eslint-disable */
// 添加请求拦截器
axios.interceptors.request.use(
  function (config) {
    // config.data = JSON.stringify(config.data)
    // 在发送请求之前做些什么
    // console.log(config)
    // 没有Authorization并且本地由token，就添加Authorization属性
    // 这里不能写null，null表示有这个属性，只不过该属性没有值
    // undefined表示不存在
    if (config.headers.Authorization === undefined && getToken()) {
      config.headers.Authorization = `Bearer ${getToken()}`
    }

    return config
  },
  function (error) {
    // 对请求错误做些什么
    return Promise.reject(error)
  }
)

// 添加响应拦截器
axios.interceptors.response.use(
  function (response) {
    // 对响应数据做点什么
    // http响应状态码为2xx，3xx就进入这里
    return response
  },
  async function (error) {
    // 对响应错误做点什么
    // http响应状态码4xx，5xx报错进入这里
    console.dir(error)
    // token过期，后台响应报错401
    if (error.response.status === 401) {
      // 消息通知
      // Notify({ type: 'warning', message: '身份过期，请重新登录！', duration: 1000 })
      // 重新跳转到登录页面，重新登录更新token
      /* 不能用this.$router，因为此时不是在vue文件里，是在js文件里，
      this指向为u你的find，引入一个路由实例对象，直接通过该实例对象调用路由跳转方法 */

      // 清除token
      removeToken()
      // token过期 方法1：重新登录，用户体验差
      router.replace(`/login?path=${router.currentRoute.fullPath}`)

      //   // token过期 方法2：token续签，用户无感知token过期（体验好）
      //   const {
      //     data: { data }
      //   } = await refreshTokenAPI()
      //   // 1.设置新token
      //   setToken(data.token)
      //   // 2.将错误的Authorization改正确的token,更新Authorization
      //   error.config.headers.Authorization = `Bearer ${getToken()}`
      //   // 3.未完成这次请求，再一次发起
      //   // error.config是上一次请求的 配置 对象
      //   // 结果我们要返回原本逻辑页面的地方-还是return回去一个promise对象
      //   return axios(error.config)
      // } else if (
      //   // refreshToken也过期了
      //   error.response.status === 500 &&
      //   error.config.url === '/v1_0/authorizations' &&
      //   error.config.method === 'put'
      // ) {
      //   // 顶部提示框
      //   Notify({ type: 'warning', message: '身份过期，请重新登录！', duration: 1000 })
      //   // 清空token和refreshToken
      //   localStorage.clear()
      //   // 重新登录，获取新的 refreshToken
      //   router.replace('/login')
    }
    return Promise.reject(error)
  }
)
export default axios
